package redis.clients.util;

import java.util.ArrayList;
import java.util.List;

public class Slowlog {
    private final long id;
    private final long timeStamp;
    private final long executionTime;
    private final List<String> args;

    @SuppressWarnings("unchecked")
    public static List<Slowlog> from(List<Object> nestedMultiBulkReply) {
	List<Slowlog> logs = new ArrayList<Slowlog>(nestedMultiBulkReply.size());
	for (Object obj : nestedMultiBulkReply) {
	    List<Object> properties = (List<Object>) obj;
	    logs.add(new Slowlog(properties));
	}

	return logs;
    }

    @SuppressWarnings("unchecked")
    private Slowlog(List<Object> properties) {
	super();
	this.id = (Long) properties.get(0);
	this.timeStamp = (Long) properties.get(1);
	this.executionTime = (Long) properties.get(2);

	List<byte[]> bargs = (List<byte[]>) properties.get(3);
	this.args = new ArrayList<String>(bargs.size());

	for (byte[] barg : bargs) {
	    this.args.add(SafeEncoder.encode(barg));
	}
    }

    public long getId() {
	return id;
    }

    public long getTimeStamp() {
	return timeStamp;
    }

    public long getExecutionTime() {
	return executionTime;
    }

    public List<String> getArgs() {
	return args;
    }
}
